<?php
namespace libs\qoy\Logger;
/**
 * File 文件日记纪录类
 *
 * - 将日记写入文件，文件目录可以自定义
 * @param array $config 初始化配置
 * @param string $config["path"] 日志写入目录 ./../rec/./../rec/
 * @param string $config["dateFormat"] 日志日期格式 Y-m-d H:i:sY-m-d H:i:s
 */

class File extends Logger {

    /** 外部传参 **/
    protected $logFolder;
    protected $dateFormat;

    /** 内部状态 **/
    protected $fileDate;
    protected $logFile;
    
    
    /**
     * 构造方法
     * @param array $config 初始化配置
     * @param string $config["path"] 日志写入目录 ./../rec/./../rec/
     * @param string $config["dateFormat"] 日志日期格式 Y-m-d H:i:sY-m-d H:i:s
     */

    public function __construct(array $config) {
        $this->logFolder = isset($config["path"]) ? $config["path"] : "./../rec/";
        $this->dateFormat = isset($config["dateFormat"]) ? $config["dateFormat"]:'Y-m-d H:i:s';
        $this->init();
    }
    protected function init() {
        // 跨天时新建日记文件
        $curFileDate = date('Ymd', time());
        if ($this->fileDate == $curFileDate) {
            return;
        }
        $this->fileDate = $curFileDate;

        // 每月一个目录
        $folder = $this->logFolder
            . DIRECTORY_SEPARATOR . 'log'
            . DIRECTORY_SEPARATOR . substr($this->fileDate, 0, -2);
        if (!file_exists($folder)) {
            mkdir($folder . '/', 0777, TRUE);
        }

        // 每天一个文件
        $this->logFile = $folder
            . DIRECTORY_SEPARATOR . $this->fileDate . '.log';
        if (!file_exists($this->logFile)) {
            touch($this->logFile);
            chmod($this->logFile, 0777);
        }
    }

    public function log($type, $msg, $data) {
        $this->init();

        $msgArr = array();
        $msgArr[] = date($this->dateFormat, time());
        $msgArr[] = strtoupper($type);
        $msgArr[] = str_replace(PHP_EOL, '\n', $msg);
        if ($data !== NULL) {
            $msgArr[] = is_array($data) ? json_encode($data) : $data;
        }

        $content = implode('|', $msgArr) . PHP_EOL;

        file_put_contents($this->logFile, $content, FILE_APPEND);
    }
}
